#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(void){
  char *ipStr = "192.168.1.200";
  printf("%s的16进制:0x%X 0x%X 0x%X 0x%X\n",ipStr,
    192,168,1,200);
  // 定义一个包含ip+port的地址的结构体变量
  struct sockaddr_in socketAddr;
  
  // 定义一个ip地址结构体变量
  struct in_addr socketIp;
  // 初始化
  memset(&socketAddr,0,sizeof(socketAddr));
  memset(&socketIp,0,sizeof(socketIp));
  // 赋值ip地址:将主机字节序IP字符串转为网络字节序的IP地址(IPV4协议))
  //inet_aton(ipStr,&socketIp);
  // 可以指定协议的转换函数-指定为AF_INET(IPV4)
  // inet_pton(AF_INET,ipStr,&socketIp.s_addr);
  inet_pton(AF_INET,ipStr,&socketIp);
  printf("%s转为网络字节序:Ox%X\n",ipStr,socketIp.s_addr);
  
  // 结构体转字符串，网络转主机
  printf("socketIp:网络字节序转主机字节序显示:%s\n",inet_ntoa(socketIp));
  // 显示网络号-以主机字节序顺序显示
  printf("socketIp网络号:0x%X\n",inet_netof(socketIp));
  // 显示主机号-以主机字节序顺序显示
  printf("socketIp主机号:0x%X\n",inet_lnaof(socketIp));

  // 网络号和主机号的拼接
  socketAddr.sin_addr = inet_makeaddr(inet_netof(socketIp),
                                      inet_lnaof(socketIp));
  printf("拼接后的ip:%s\n",inet_ntoa(socketAddr.sin_addr));

  return 0;
}